****************************************
*     Handler fuer Speechprocessor     *
*     Ausgabe eines Daten-Strings      *
*       ueber den Joystick-Port        *
*              ATMAS II                *
*Andreas Binner & Harald Schoenfeld '87*
****************************************

	ORG $600

PACTL	EQU $D302 ;Kontrollreg. Port A
PORTA	EQU $D300 ;Datenreg. Port A
BUFFER	EQU $3FD  ;Zwischenspeicher
INDEX	EQU $6FF  ;Zeiger im Buffer


	PLA	 ;Holt Anz. der vom 
*		 ;BASIC uebergebenen
*		 ;Parameter vom Stapel

INIT	LDA #'V   ;Eintrag V: Handler
	STA $32C
	LDA #TABELLE
	STA $32D
	LDA #TABELLE/256
	STA $32E
	RTS

TABELLE	DFW OPEN-1 ;Handlertabelle
	DFW CLOSE-1
	DFW GET-1
	DFW PUT-1
	DFW STATUS-1
	DFW SPECIAL-1

OPEN	LDA #$38  ;Directioncontroll-
*		 ;register ansprechen
	STA PACTL
	LDA #$7F  ;Bit 0-6 auf Ausgabe
	STA PORTA ;Bit 7 auf Eingabe
	LDA #$3C  ;Port A freigeben
	STA PACTL
	LDA #0    ;Bufferanfang
	STA INDEX
	LDY #1    ;Status OK
	RTS

CLOSE	LDA #$38  ;Directioncontroll-
*		 ;register ansprechen
	STA PACTL
	LDA #0    ;8 Bits auf Eingabe
	STA PORTA
	LDA #$3C  ;Port A freigeben
	STA PACTL
	LDY #1    ;Status OK
	RTS

GET	RTS	 ;Nicht moeglich

PUT	LDY INDEX ;Uebertragenes Byte
	STA BUFFER,Y ;in Buffer ablegen
	CMP #155	 ;End of line?
	BEQ SPEECH ;Ja-->Daten ausgeben
	INY	 ;Zeiger plus 1
	STY INDEX
	BEQ SPEECH ;Buffer voll?
	LDY #1	 ;Status OK
	RTS

SPEECH	LDY #0	 ;Bufferanfang
LOOP	LDA BUFFER,Y ;Wert lesen
	CMP #48   ;Wert <48 ?
	BCC ERROR ;Ja-->Fehlermeldung
	CMP #112  ;Wert >=112 ?
	BCS ERROR
	SEC
	SBC #48	 ;Wert - 48
	STA PORTA ;Ueber Joystickports
*		 ;ausgeben
	JSR WAIT  ;Warteschleife
	ORA #64	 ;Uebergabebit:1
	STA PORTA ;Ausgeben
	JSR WAIT
	AND #63	 ;Uebergabebit:0
	STA PORTA ;Ausgeben
BUSY	LDA PORTA ;Speechprozessor
	BPL BUSY  ;fertig? 
	LDA 17    ;Breaktaste abfragen
	BEQ BREAK
	INY	 ;Naechster Wert
	CPY INDEX ;Alles ausgegeben?
	BNE LOOP  ;Nein-->
ENDE	LDA #0    ;Zeiger zuruecksetzen
	STA INDEX
	LDY #1	 ;Status OK
	RTS

ERROR	LDY #132  ;Fehler 132 ausgeben
	LDA #0
	STA INDEX
	RTS

BREAK	LDY #128  ;Fehler 128 ausgeben
	LDA #0
	STA INDEX
	RTS

WAIT	LDX #0	 ;Warteschleife
W1	DEX
	BNE W1
	RTS

STATUS	RTS	 ;Beides nicht

SPECIAL	RTS	 ;noetig
